package com.thiswhyme.common.utils.json.fastjson;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;

import java.util.Date;
import java.util.List;

/**
 * Json工具-FastJson
 * Created by thiswhyme on 2019/06/06.
 */
public class FastJsonUtils {

    private static SerializeConfig mapping = new SerializeConfig();

    static {
        mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
    }

    /**
     * 对象转为json
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> String obj2String(T obj) {
        return obj == null ? null : JSON.toJSONString(obj, mapping);
    }

    /**
     * 对象转json，并格式化的输出
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> String obj2StringPretty(T obj) {
        return obj == null ? null : JSON.toJSONString(obj, mapping, SerializerFeature.PrettyFormat);
    }

    /**
     * json转对象
     * @param json
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T string2Obj(String json, Class<T> clazz) {
        return JSON.parseObject(json, clazz);
    }

    /**
     * json转对象
     * @param json
     * @param typeReference
     * @param <T>
     * @return
     */
    public static <T> T string2Obj(String json, TypeReference<T> typeReference){
        return JSON.parseObject(json, typeReference);
    }

    /**
     * json转List对象
     * @param json
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> List<T> string2List(String json, Class<T> clazz) {
        return JSON.parseArray(json, clazz);
    }
}
